package paket;



import admin.gameInterface;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.geom.Rectangle2D;
import java.awt.image.ImageObserver;
import java.io.File;
import java.util.ArrayList;
import java.util.Set;
import sun.security.util.Cache.EqualByteArray;

/**
 *
 * @author F. Oğuz
 */

public abstract class Hero {
    private int health; // Kahramanın o anki enerjisini tutacak değişken
    private int strokePower;  // Kahramanın vuruş gücünü tutacak değişken
    private Image aImage[] = new Image[20] ;
    private String gifRight = null;
    private String gifLeft = null;
    private int defaultHealth = -1;
    private int no;
    private int team;
    private String teamRenk;

    public String getTeamRenk() {
        return teamRenk;
    }

    public void setTeamRenk(String teamRenk) {
        this.teamRenk = teamRenk;
    }
    private String name;

    public String getName(){
        return name;
    }

    public void setName(String isim){
        name=isim;
    }
    public int isTeam() {
        return team;
    }

    public void setTeam(int team) {
        this.team = team;
    }

    public int getNo() {
        return no;
    }

    public void setNo(int no) {
        this.no = no;
    }

    public int getDefaultHealth() {
        return defaultHealth;
    }

    public void setDefaultHealth(int defaultHealth) {
        this.defaultHealth = defaultHealth;
    }

    public String getGifLeft() {
        return gifLeft;
    }

    public void setGifLeft(String gifLeft) {
        this.gifLeft = gifLeft;
    }

    public String getGifRight() {
        return gifRight;
    }

    public void setGifRight(String gifRight) {
        this.gifRight = gifRight;
    }

    public int getFrame() {
        return frame;
    }

   

    public void setFrame(int frame) {
        this.frame = frame;
    }
    private boolean gruop;
    public static int frame = 1;

    public Image[] getaImage() {
        return aImage;
    }

    public void setaImage(Image[] aImage) {
        this.aImage = aImage;
    }



    public boolean isGruop() {
        return gruop;
    }

    public void setGruop(boolean gruop) {
        this.gruop = gruop;
    }
    private File file;

    public File getFile() {
        return file;
    }

    public void setFile(File file) {
        this.file = file;
    }
/*    private  int row;
    private  int col;
    private double x,y;
*/
    public int getHealth() {
        return health;
    }

    public void setHealth(int health) {
        this.health = health;
    }

    public int getStrokePower() {
        return strokePower;
    }

    public void setStrokePower(int strokePower) {
        this.strokePower = strokePower;
    }
    public void draw(Graphics g3,int i,int j,int PAD, double xInc, double yInc, ImageObserver obj){
            //Rectangle2D.Double hede
            if ((100*this.health)/this.defaultHealth > 70){
                g3.setColor(Color.GREEN);
            }
            else if ((100*this.health)/this.defaultHealth < 30){
                g3.setColor(Color.RED);
            }
            else{
                g3.setColor(Color.blue);
            }
            if ((100*this.health)/this.defaultHealth > 0){
                //g3.drawImage(this.getaImage()[frame %19] , (int) (i * xInc) + PAD, (int) (j * yInc) + PAD, obj);
                g3.drawImage(this.getaImage()[frame %19],  (int) (i * xInc) + PAD, (int) (j * yInc) + PAD, (int) xInc,(int) yInc, obj);
            }else{
                g3.drawImage(this.getaImage()[19] , (int) (i * xInc) + PAD, (int) (j * yInc) + PAD, (int) xInc, (int) yInc, obj);

            }
            
            g3.fill3DRect((int) (i * xInc) + PAD , (int) (j * yInc) + PAD + 12, 6, (this.getHealth()* 43)/this.defaultHealth, false);
    }

    public abstract void stop();
        /**
         * Dur metodu.
         * Kahraman yerinde durup hiçbir şey yapmadığında kullanılacak.
         * Türetilen sınıfta override edilecek
         */

    public abstract ArrayList hamleleriDondur(paket.Hero[][] heroes,  int i,int j);
        /**
         * İlerle metodu.
         * Kahraman yalnızca ilerlediğinde kullanılacak.
         * Türetilen sınıfta override edilecek
         */

    public abstract int fight(Hero[][] heroes,int i, int j);
        /**
         * Savaş metodu.
         * Kahraman savaştığında yani rakiplerine darbe yaptığında kullanılacak.
         * Türetilen sınıfta override edilecek
         */

    public abstract void runAndFight();
        /**
         * İlerle ve Savaş metodu.
         * Kahraman hem konum değiştirip hem de rakiplerine darbe yaptığında kullanılacak.
         * Türetilen sınıfta override edilecek
         */

    public static Hero[][] makeHero(gameInterface postGame){

        Hero[][] heroes = new Hero[BoardPanel.ROWS][BoardPanel.COLS];
        System.out.println(postGame.ba1_p);
        if (postGame.ba1_p > 0){
        heroes[postGame.ba1_x][postGame.ba1_y] = new Knight(0);
        heroes[postGame.ba1_x][postGame.ba1_y].setNo(1);
        heroes[postGame.ba1_x][postGame.ba1_y].setHealth(postGame.ba1_p);
        }
        if (postGame.ba2_p > 0){
        heroes[postGame.ba2_x][postGame.ba2_y] = new Knight(0);
        heroes[postGame.ba2_x][postGame.ba2_y].setNo(2);
        heroes[postGame.ba2_x][postGame.ba2_y].setHealth(postGame.ba2_p);
        }
        if (postGame.bk1_p > 0){
        heroes[postGame.bk1_x][postGame.bk1_y] = new Sword(0);
        heroes[postGame.bk1_x][postGame.bk1_y].setNo(1);
        heroes[postGame.bk1_x][postGame.bk1_y].setHealth(postGame.bk1_p);
        }
        if (postGame.bk2_p > 0){
        heroes[postGame.bk2_x][postGame.bk2_y] = new Sword(0);
        heroes[postGame.bk2_x][postGame.bk2_y].setNo(2);
        heroes[postGame.bk2_x][postGame.bk2_y].setHealth(postGame.bk2_p);
        }
        if (postGame.bm1_p > 0){
        heroes[postGame.bm1_x][postGame.bm1_y] = new Lance(0);
        heroes[postGame.bm1_x][postGame.bm1_y].setNo(1);
        heroes[postGame.bm1_x][postGame.bm1_y].setHealth(postGame.bm1_p);
        }
        if (postGame.bm2_p > 0){
        heroes[postGame.bm2_x][postGame.bm2_y] = new Lance(0);
        heroes[postGame.bm2_x][postGame.bm2_y].setNo(2);
        heroes[postGame.bm2_x][postGame.bm2_y].setHealth(postGame.bm2_p);
        }
        if (postGame.bo1_p > 0){
        heroes[postGame.bo1_x][postGame.bo1_y] = new Archer(0);
        heroes[postGame.bo1_x][postGame.bo1_y].setNo(1);
        heroes[postGame.bo1_x][postGame.bo1_y].setHealth(postGame.bo1_p);
        }
        if (postGame.bo2_p > 0){
        heroes[postGame.bo2_x][postGame.bo2_y] = new Archer(0);
        heroes[postGame.bo2_x][postGame.bo2_y].setNo(2);
        heroes[postGame.bo2_x][postGame.bo2_y].setHealth(postGame.bo2_p);
        }
        if (postGame.ra1_p > 0){
        heroes[postGame.ra1_x][postGame.ra1_y] = new Knight(1);
        heroes[postGame.ra1_x][postGame.ra1_y].setNo(1);
        heroes[postGame.ra1_x][postGame.ra1_y].setHealth(postGame.ra1_p);
        }if (postGame.ra2_p > 0){
        heroes[postGame.ra2_x][postGame.ra2_y] = new Knight(1);
        heroes[postGame.ra2_x][postGame.ra2_y].setNo(2);
        heroes[postGame.ra2_x][postGame.ra2_y].setHealth(postGame.ra2_p);
        }if (postGame.rk1_p > 0){
        heroes[postGame.rk1_x][postGame.rk1_y] = new Sword(1);
        heroes[postGame.rk1_x][postGame.rk1_y].setNo(1);
        heroes[postGame.rk1_x][postGame.rk1_y].setHealth(postGame.rk1_p);
        }if (postGame.rk2_p > 0){
        heroes[postGame.rk2_x][postGame.rk2_y] = new Sword(1);
        heroes[postGame.rk2_x][postGame.rk2_y].setNo(2);
        heroes[postGame.rk2_x][postGame.rk2_y].setHealth(postGame.rk2_p);
        }if (postGame.rm1_p > 0){
        heroes[postGame.rm1_x][postGame.rm1_y] = new Lance(1);
        heroes[postGame.rm1_x][postGame.rm1_y].setNo(1);
        heroes[postGame.rm1_x][postGame.rm1_y].setHealth(postGame.rm1_p);
        }if (postGame.rm2_p > 0){
        heroes[postGame.rm2_x][postGame.rm2_y] = new Lance(1);
        heroes[postGame.rm2_x][postGame.rm2_y].setNo(2);
        heroes[postGame.rm2_x][postGame.rm2_y].setHealth(postGame.rm2_p);
        }if (postGame.ro1_p > 0){
        heroes[postGame.ro1_x][postGame.ro1_y] = new Archer(1);
        heroes[postGame.ro1_x][postGame.ro1_y].setNo(1);
        heroes[postGame.ro1_x][postGame.ro1_y].setHealth(postGame.ro1_p);
        }if (postGame.ro2_p > 0){
        heroes[postGame.ro2_x][postGame.ro2_y] = new Archer(1);
        heroes[postGame.ro2_x][postGame.ro2_y].setNo(2);
        heroes[postGame.ro2_x][postGame.ro2_y].setHealth(postGame.ro2_p);
        }
        BoardPanel.ourTeam = postGame.team;
        if (BoardPanel.ourTeam == 1 ){
            BoardPanel.rakipTeam = 0;
        }
        else{
            BoardPanel.rakipTeam = 1;
        }
        return heroes;
    }
    public static gameInterface makeGamePad(Hero[][] heroes, gameInterface sendGame){

        sendGame.ba1_p = 0;
        sendGame.ba1_x = 0;
        sendGame.ba1_y = 0;
        sendGame.ba2_p = 0;
        sendGame.ba2_x = 0;
        sendGame.ba2_y = 0;
        sendGame.bo1_p = 0;
        sendGame.bo1_x = 0;
        sendGame.bo1_y = 0;
        sendGame.bo2_p = 0;
        sendGame.bo2_x = 0;
        sendGame.bo2_y = 0;
        sendGame.bm1_p = 0;
        sendGame.bm1_x = 0;
        sendGame.bm1_y = 0;
        sendGame.bm2_p = 0;
        sendGame.bm2_x = 0;
        sendGame.bm2_y = 0;
        sendGame.bk1_p = 0;
        sendGame.bk1_x = 0;
        sendGame.bk1_y = 0;
        sendGame.bk2_p = 0;
        sendGame.bk2_x = 0;
        sendGame.bk2_y = 0;

        sendGame.ra1_p = 0;
        sendGame.ra1_x = 0;
        sendGame.ra1_y = 0;
        sendGame.ra2_p = 0;
        sendGame.ra2_x = 0;
        sendGame.ra2_y = 0;
        sendGame.ro1_p = 0;
        sendGame.ro1_x = 0;
        sendGame.ro1_y = 0;
        sendGame.ro2_p = 0;
        sendGame.ro2_x = 0;
        sendGame.ro2_y = 0;
        sendGame.rm1_p = 0;
        sendGame.rm1_x = 0;
        sendGame.rm1_y = 0;
        sendGame.rm2_p = 0;
        sendGame.rm2_x = 0;
        sendGame.rm2_y = 0;
        sendGame.rk1_p = 0;
        sendGame.rk1_x = 0;
        sendGame.rk1_y = 0;
        sendGame.rk2_p = 0;
        sendGame.rk2_x = 0;
        sendGame.rk2_y = 0;


        for (int i = 0; i < BoardPanel.ROWS; i++) {

            for (int j = 0; j < BoardPanel.COLS; j++) {
                if (heroes[i][j] != null  && heroes[i][j].getHealth() > 0 ) {
                    if (heroes[i][j].getClass() == Knight.class) {  // değişikliği yaptığımız hero knight ise
                        if (heroes[i][j].isTeam() == 0 ) {                 // hero mavi takım mı kırmızı takım mı diye baktık.
                            if (heroes[i][j].getNo() == 1) {
                                sendGame.ba1_x = i;
                                sendGame.ba1_y = j;
                                sendGame.ba1_p = heroes[i][j].getHealth();
                            } else {
                                sendGame.ba2_x = i;
                                sendGame.ba2_y = j;
                                sendGame.ba2_p = heroes[i][j].getHealth();
                            }

                        } else {                                  //Takim kirmizi ise...
                            if (heroes[i][j].getNo() == 1) {
                                sendGame.ra1_x = i;
                                sendGame.ra1_y = j;
                                sendGame.ra1_p = heroes[i][j].getHealth();
                            } else {
                                sendGame.ra2_x = i;
                                sendGame.ra2_y = j;
                                sendGame.ra2_p = heroes[i][j].getHealth();
                            }
                        }
                    } else if (heroes[i][j].getClass() == Sword.class) {
                        if (heroes[i][j].isTeam() == 0) {                 // hero mavi takım mı kırmızı takım mı diye baktık.
                            if (heroes[i][j].getNo() == 1) {
                                sendGame.bk1_x = i;
                                sendGame.bk1_y = j;
                                sendGame.bk1_p = heroes[i][j].getHealth();
                            } else {
                                sendGame.bk2_x = i;
                                sendGame.bk2_y = j;
                                sendGame.bk2_p = heroes[i][j].getHealth();
                            }

                        } else {                                  //Takim kirmizi ise...
                            if (heroes[i][j].getNo() == 1) {
                                sendGame.rk1_x = i;
                                sendGame.rk1_y = j;
                                sendGame.rk1_p = heroes[i][j].getHealth();
                            } else {
                                sendGame.rk2_x = i;
                                sendGame.rk2_y = j;
                                sendGame.rk2_p = heroes[i][j].getHealth();
                            }
                        }

                    } else if (heroes[i][j].getClass() == Lance.class) {
                        if (heroes[i][j].isTeam() == 0) {                 // hero mavi takım mı kırmızı takım mı diye baktık.
                            if (heroes[i][j].getNo() == 1) {
                                sendGame.bm1_x = i;
                                sendGame.bm1_y = j;
                                sendGame.bm1_p = heroes[i][j].getHealth();
                            } else {
                                sendGame.bm2_x = i;
                                sendGame.bm2_y = j;
                                sendGame.bm2_p = heroes[i][j].getHealth();
                            }

                        } else {                                  //Takim kirmizi ise...
                            if (heroes[i][j].getNo() == 1) {
                                sendGame.rm1_x = i;
                                sendGame.rm1_y = j;
                                sendGame.rm1_p = heroes[i][j].getHealth();
                            } else {
                                sendGame.rm2_x = i;
                                sendGame.rm2_y = j;
                                sendGame.rm2_p = heroes[i][j].getHealth();
                            }
                        }

                    } else if (heroes[i][j].getClass() == Archer.class) {
                        if (heroes[i][j].isTeam() == 0) {                 // hero mavi takım mı kırmızı takım mı diye baktık.
                            if (heroes[i][j].getNo() == 1) {
                                sendGame.bo1_x = i;
                                sendGame.bo1_y = j;
                                sendGame.bo1_p = heroes[i][j].getHealth();
                            } else {
                                sendGame.bo2_x = i;
                                sendGame.bo2_y = j;
                                sendGame.bo2_p = heroes[i][j].getHealth();
                            }

                        } else {                                  //Takim kirmizi ise...
                            if (heroes[i][j].getNo() == 1) {
                                sendGame.ro1_x = i;
                                sendGame.ro1_y = j;
                                sendGame.ro1_p = heroes[i][j].getHealth();
                            } else {
                                sendGame.ro2_x = i;
                                sendGame.ro2_y = j;
                                sendGame.ro2_p = heroes[i][j].getHealth();
                            }
                        }
                    }
                }
            }
        }

        sendGame.team = BoardPanel.ourTeam;
        return sendGame;
    }


    public static gameInterface makeGamePad(Hero[][] heroes){
        gameInterface sendGame = new gameInterface();
        sendGame.ba1_p = 0;
        sendGame.ba1_x = 0;
        sendGame.ba1_y = 0;
        sendGame.ba2_p = 0;
        sendGame.ba2_x = 0;
        sendGame.ba2_y = 0;
        sendGame.bo1_p = 0;
        sendGame.bo1_x = 0;
        sendGame.bo1_y = 0;
        sendGame.bo2_p = 0;
        sendGame.bo2_x = 0;
        sendGame.bo2_y = 0;
        sendGame.bm1_p = 0;
        sendGame.bm1_x = 0;
        sendGame.bm1_y = 0;
        sendGame.bm2_p = 0;
        sendGame.bm2_x = 0;
        sendGame.bm2_y = 0;
        sendGame.bk1_p = 0;
        sendGame.bk1_x = 0;
        sendGame.bk1_y = 0;
        sendGame.bk2_p = 0;
        sendGame.bk2_x = 0;
        sendGame.bk2_y = 0;

        sendGame.ra1_p = 0;
        sendGame.ra1_x = 0;
        sendGame.ra1_y = 0;
        sendGame.ra2_p = 0;
        sendGame.ra2_x = 0;
        sendGame.ra2_y = 0;
        sendGame.ro1_p = 0;
        sendGame.ro1_x = 0;
        sendGame.ro1_y = 0;
        sendGame.ro2_p = 0;
        sendGame.ro2_x = 0;
        sendGame.ro2_y = 0;
        sendGame.rm1_p = 0;
        sendGame.rm1_x = 0;
        sendGame.rm1_y = 0;
        sendGame.rm2_p = 0;
        sendGame.rm2_x = 0;
        sendGame.rm2_y = 0;
        sendGame.rk1_p = 0;
        sendGame.rk1_x = 0;
        sendGame.rk1_y = 0;
        sendGame.rk2_p = 0;
        sendGame.rk2_x = 0;
        sendGame.rk2_y = 0;


        for (int i = 0; i < BoardPanel.ROWS; i++) {

            for (int j = 0; j < BoardPanel.COLS; j++) {
                if (heroes[i][j] != null && heroes[i][j].getHealth() > 0 ) {
                    if (heroes[i][j].getClass() == Knight.class) {  // değişikliği yaptığımız hero knight ise
                        if (heroes[i][j].isTeam() == 0) {                 // hero mavi takım mı kırmızı takım mı diye baktık.
                            if (heroes[i][j].getNo() == 1) {
                                sendGame.ba1_x = i;
                                sendGame.ba1_y = j;
                                sendGame.ba1_p = heroes[i][j].getHealth();
                            } else {
                                sendGame.ba2_x = i;
                                sendGame.ba2_y = j;
                                sendGame.ba2_p = heroes[i][j].getHealth();
                            }

                        } else {                                  //Takim kirmizi ise...
                            if (heroes[i][j].getNo() == 1) {
                                sendGame.ra1_x = i;
                                sendGame.ra1_y = j;
                                sendGame.ra1_p = heroes[i][j].getHealth();
                            } else {
                                sendGame.ra2_x = i;
                                sendGame.ra2_y = j;
                                sendGame.ra2_p = heroes[i][j].getHealth();
                            }
                        }
                    } else if (heroes[i][j].getClass() == Sword.class) {
                        if (heroes[i][j].isTeam() == 0) {                 // hero mavi takım mı kırmızı takım mı diye baktık.
                            if (heroes[i][j].getNo() == 1) {
                                sendGame.bk1_x = i;
                                sendGame.bk1_y = j;
                                sendGame.bk1_p = heroes[i][j].getHealth();
                            } else {
                                sendGame.bk2_x = i;
                                sendGame.bk2_y = j;
                                sendGame.bk2_p = heroes[i][j].getHealth();
                            }

                        } else {                                  //Takim kirmizi ise...
                            if (heroes[i][j].getNo() == 1) {
                                sendGame.rk1_x = i;
                                sendGame.rk1_y = j;
                                sendGame.rk1_p = heroes[i][j].getHealth();
                            } else {
                                sendGame.rk2_x = i;
                                sendGame.rk2_y = j;
                                sendGame.rk2_p = heroes[i][j].getHealth();
                            }
                        }

                    } else if (heroes[i][j].getClass() == Lance.class) {
                        if (heroes[i][j].isTeam() == 0) {                 // hero mavi takım mı kırmızı takım mı diye baktık.
                            if (heroes[i][j].getNo() == 1) {
                                sendGame.bm1_x = i;
                                sendGame.bm1_y = j;
                                sendGame.bm1_p = heroes[i][j].getHealth();
                            } else {
                                sendGame.bm2_x = i;
                                sendGame.bm2_y = j;
                                sendGame.bm2_p = heroes[i][j].getHealth();
                            }

                        } else {                                  //Takim kirmizi ise...
                            if (heroes[i][j].getNo() == 1) {
                                sendGame.rm1_x = i;
                                sendGame.rm1_y = j;
                                sendGame.rm1_p = heroes[i][j].getHealth();
                            } else {
                                sendGame.rm2_x = i;
                                sendGame.rm2_y = j;
                                sendGame.rm2_p = heroes[i][j].getHealth();
                            }
                        }

                    } else if (heroes[i][j].getClass() == Archer.class) {
                        if (heroes[i][j].isTeam() == 0) {                 // hero mavi takım mı kırmızı takım mı diye baktık.
                            if (heroes[i][j].getNo() == 1) {
                                sendGame.bo1_x = i;
                                sendGame.bo1_y = j;
                                sendGame.bo1_p = heroes[i][j].getHealth();
                            } else {
                                sendGame.bo2_x = i;
                                sendGame.bo2_y = j;
                                sendGame.bo2_p = heroes[i][j].getHealth();
                            }

                        } else {                                  //Takim kirmizi ise...
                            if (heroes[i][j].getNo() == 1) {
                                sendGame.ro1_x = i;
                                sendGame.ro1_y = j;
                                sendGame.ro1_p = heroes[i][j].getHealth();
                            } else {
                                sendGame.ro2_x = i;
                                sendGame.ro2_y = j;
                                sendGame.ro2_p = heroes[i][j].getHealth();
                            }
                        }
                    }
                }
            }
        }

        sendGame.team = BoardPanel.ourTeam;
        return sendGame;
    }
    public static hareket  diffHero(Hero[][] hero1,Hero[][] hero2){
        hareket hareket = new hareket();
        for(int i = 0; i < BoardPanel.ROWS; i++) {
            for(int j = 0; j < BoardPanel.COLS; j++) {
         
                if (hero1[i][j] != null && hero2[i][j] ==null){
                   // System.out.println("Hero tipi hareket eden:" + hero1[i][j].getClass()+" xysi:"+i+":"+j);
                    hareket.setX1(i);
                    hareket.setY1(j);
                }
                else if(hero1[i][j] == null && hero2[i][j] !=null){
                    //System.out.println("Hero tipi hareket eden:" + hero2[i][j].getClass()+" xysi:"+i+":"+j);
                    hareket.setX2(i);
                    hareket.setY2(j);
                }
            }
        }
        return hareket;
    }

    public static void  Yazdir(Hero[][] hero1){
        for(int i = 0; i < BoardPanel.ROWS; i++) {
            for(int j = 0; j < BoardPanel.COLS; j++) {
                if (hero1[i][j] != null){
                    System.out.println(", I: "+i+" ,J: "+j+", Hayat: "+hero1[i][j].getHealth()+""+hero1[i][j].getClass()+": "+hero1[i][j].getTeamRenk());
                }
            }
        }

    }
    public static void savasVeHayatDus(paket.Hero[][] heroes, int takim, paket.hareket hr) {
        // burada heroların içindeki savaş metotu çalıştırılacak tek tek
        //  ve geri dönen değerler toplanarak puan hesaplanacak.
        // herolar'ın fight' ıçalıştırılacak, her hero old yerde savaşacak.
        String renk = "blue";
        if (takim == 1) {
            renk = "kirmizi";
        }
        //int verilenZarar = 0;
        

        for (int i = 0; i < paket.BoardPanel.ROWS; i++) {
            for (int j = 0; j < paket.BoardPanel.COLS; j++) {
                //  try{
                if (heroes[i][j] != null) {
                    //System.out.println("alooo");
                    if (heroes[i][j].getTeamRenk().equals(renk)) {
                        // System.out.println("bbbbbbbbbb");
                        int k = heroes[i][j].fight(heroes, i, j);
                        System.out.println("savaşan : " + heroes[i][j] + " vuruşu : " + k);
                        //verilenZarar = verilenZarar + k;
                    }
                }
                //   }catch(Exception e){
                //          System.out.println("tahta puanda hata : "+e);
                //          System.out.println("i : "+i +" , j : "+ j);
                //          System.out.println("savaşan : "+heroes[i][j]+" vuruşu : ");
                //  }
            }
        }
       // System.out.println("---------------Hasar----------- 2");
       // Hero.Yazdir(heroes);
       // System.out.println("---------------Hasar-----------");
        hareketPuaniDusur(heroes, takim, hr);
       // System.out.println("---------------Hasar----------- 1");
       // Hero.Yazdir(heroes);
       // System.out.println("---------------Hasar-----------");
        //return heroes;
    }
    public static int hareketPuaniDusur(paket.Hero[][] heroes, int takim, paket.hareket hr) { // hareket sonrası puan hesaplaması
        String renk = "blue";
        if (takim == 1) {
            renk = "kirmizi";
        }

        for (int i = 0; i < paket.BoardPanel.ROWS; i++) {
            for (int j = 0; j < paket.BoardPanel.COLS; j++) {
                try {
                    if (heroes[i][j] != null) {
                        if (heroes[i][j].getTeamRenk().equals(renk)) {  // aynı takımsa
                            heroes[i][j].setHealth((heroes[i][j].getHealth() - 2)); // butun karakterlerden -2 duser
                        }                                                         // aşağılarda ise oynayana
                    }                                                           //   +1 ilave edilecek
                } catch (Exception e) {
                    System.out.println("e : " + e);
                }
            }
        }

        if (hr != null) {
            if (hr.getX2() != -1 && hr.getY2() != -1) {
                heroes[hr.getX2()][hr.getY2()].setHealth((heroes[hr.getX2()][hr.getY2()].getHealth() + 1));
            }                              // hareket ettiği için ilave edildi
        }
        return 0;
    }

    public static int tahtaDegeri(paket.Hero[][] heroes, int takim, hareket hr) {

        System.out.println("deger hesaplaaaaa");

        // tahtanın o takıma iat puan değeri.
        String renk = "blue";
        if (takim == 1) {
            System.out.println("renk değişti");
            renk = "kirmizi";
        }
        System.out.println("rengimiz : "+renk);
        int cost = 0;
        System.out.println("costum : " + cost);
        int bizimSaglik = 0;
        int rakipSaglik = 0;
        int bizimHeroSayisi = 0;
        int rakipHeroSayisi = 0;

        //int verilen_hasar = 0;
        //int alinan_hasar = 0;

        int atkonum = 0;
        int okkonum = 0;
        int Lancekonum = 0;

        int bizSagligiKritikHeroSay = 0;
        int rakipSagligiKritikHeroSay = 0;

        for (int i = 0; i < paket.BoardPanel.ROWS; i++) {
            for (int j = 0; j < paket.BoardPanel.COLS; j++) {
                if (heroes[i][j] != null) {
                    if (heroes[i][j].getTeamRenk().equals(renk)) {

                        bizimSaglik = bizimSaglik + heroes[i][j].getHealth();   // sağlıkları toplandı
                        bizimHeroSayisi = bizimHeroSayisi + 1;
                        if (heroes[i][j].getHealth() <= 2) {
                            bizSagligiKritikHeroSay = bizSagligiKritikHeroSay + 1;
                        }
                        if (heroes[i][j].getName().equals("Knight")) {
                            if (j > 4) {
                                atkonum = j - (BoardPanel.COLS - 1) / 2;
                            } else {
                                atkonum = (BoardPanel.COLS - 1) / 2 - j;
                            }
                        }
                        if (heroes[i][j].getName().equals("Archer")) {
                            if (j > 4) {
                                okkonum = j - (BoardPanel.COLS - 1) / 2;
                            } else {
                                okkonum = (BoardPanel.COLS - 1) / 2 - j;
                            }
                        }
                        if (heroes[i][j].getName().equals("Lance")) {
                            if (j > 4) {
                                Lancekonum = j - (BoardPanel.COLS - 1) / 2;
                            } else {
                                Lancekonum = (BoardPanel.COLS - 1) / 2 - j;
                            }   
                        }     
                        // verilen hasar hesaplamaları
                       // verilen_hasar = verilen_hasar + heroes[i][j].fight(heroes, i, j);  //  tahta bu duruma gelirken
                        //  toplam ne kadar zarar verilmiş.
                       // System.out.println("yaz ülen hasarı 2 : " + verilen_hasar);
                    } else {
                        rakipSaglik = rakipSaglik + heroes[i][j].getHealth();    // sağlıkları toplandı
                        rakipHeroSayisi = rakipHeroSayisi + 1;
                        if (heroes[i][j].getHealth() <= 4) {
                            rakipSagligiKritikHeroSay = rakipSagligiKritikHeroSay + 1;
                        }
                        //alinan_hasar = alinan_hasar + (int) heroes[i][j].fight(heroes, i, j);
                        //System.out.println("yaz ülen alınan hasarı 2 : " + alinan_hasar);
                    }
                }
            }
        }
        int t;
        int saglikDegeri = 5;
      //  int heroSayisiDegeri = 3;
     //   int kritikSaglik = 4;

       // cost = cost + verilen_hasar;
       // cost = cost - alinan_hasar;
        t = bizimSaglik - rakipSaglik;
        cost = cost + t;
        cost=cost+(3-Lancekonum);
        cost=cost+(3-okkonum);
        cost=cost+(3-atkonum);
       // t = bizimHeroSayisi - rakipHeroSayisi;
     //   cost = cost + t*heroSayisiDegeri;

       // t = bizSagligiKritikHeroSay - rakipSagligiKritikHeroSay;
     //   cost = cost + t*kritikSaglik;
        
            
        System.out.println("cost : " + cost);
        return cost;
    }

    public static boolean KuyruguTitretenVarMi(paket.Hero[][] heroes, int takim){
        boolean olu = true;
        for (int i = 0; i < paket.BoardPanel.ROWS; i++) {
            for (int j = 0; j < paket.BoardPanel.COLS; j++) {
                if (heroes[i][j] != null) {
                    if (heroes[i][j].isTeam() == takim ){
                        olu = false;
                    }
                }
            }
        }
        return olu;
    }
}